package com.answer.service.manager;

import com.answer.config.CosClientConfig;
import com.qcloud.cos.COSClient;
import com.qcloud.cos.model.PutObjectRequest;
import com.qcloud.cos.model.PutObjectResult;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Component;

import java.io.File;

/**
 * Cos 对象存储操作
 */
@Component
public class CosManager {

    @Resource
    private CosClientConfig cosClientConfig;

    @Resource
    private COSClient cosClient;

    /**
     * 上传对象
     * 将本地文件上传到COS（Cloud Object Storage）存储桶中指定的键位置
     *
     * @param key 唯一键，用于标识存储桶中的对象
     * @param localFilePath 本地文件路径，指向要上传的文件位置
     * @return 返回上传结果，包含上传后的对象信息
     */
    public PutObjectResult putObject(String key, String localFilePath) {
        // 创建一个PutObjectRequest对象，指定存储桶名称、对象的键以及本地文件路径
        PutObjectRequest putObjectRequest = new PutObjectRequest(cosClientConfig.getBucket(), key,
                new File(localFilePath));
        // 使用COS客户端的putObject方法上传对象，并返回上传结果
        return cosClient.putObject(putObjectRequest);
    }

    /**
     * 上传对象到存储桶
     *
     * @param key 对象的唯一键，用于标识对象
     * @param file 要上传的本地文件
     * @return PutObjectResult 返回上传结果，包含上传的相关信息
     */
    public PutObjectResult putObject(String key, File file) {
        // 创建一个上传对象请求，指定存储桶、对象键和本地文件
        PutObjectRequest putObjectRequest = new PutObjectRequest(cosClientConfig.getBucket(), key, file);
        // 通过COS客户端上传对象，并返回上传结果
        return cosClient.putObject(putObjectRequest);
    }
}

